package com.yunke.entity;

import com.baomidou.mybatisplus.annotation.TableName;
import com.yunke.common.base.YunkeBaseEntity;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import lombok.EqualsAndHashCode;

import java.math.BigDecimal;

/**
 * 服务信息实体类
 * 
 * @author yunke
 * @since 1.0.0
 */
@Data
@EqualsAndHashCode(callSuper = true)
@TableName("dz_service")
@Schema(description = "服务信息")
public class YunkeService extends YunkeBaseEntity {

    /**
     * 发布者用户ID
     */
    @Schema(description = "发布者用户ID")
    private Long userId;

    /**
     * 服务分类ID
     */
    @Schema(description = "服务分类ID")
    private Long categoryId;

    /**
     * 服务标题
     */
    @Schema(description = "服务标题")
    private String title;

    /**
     * 服务描述
     */
    @Schema(description = "服务描述")
    private String description;

    /**
     * 服务封面图
     */
    @Schema(description = "服务封面图")
    private String coverImage;

    /**
     * 服务图片（多张，逗号分隔）
     */
    @Schema(description = "服务图片")
    private String images;

    /**
     * 服务价格
     */
    @Schema(description = "服务价格")
    private BigDecimal price;

    /**
     * 原价（划线价）
     */
    @Schema(description = "原价")
    private BigDecimal originalPrice;

    /**
     * 价格单位：1-次 2-小时 3-天 4-月 5-年
     */
    @Schema(description = "价格单位：1-次 2-小时 3-天 4-月 5-年")
    private Integer priceUnit;

    /**
     * 服务类型：1-线上服务 2-线下服务 3-上门服务
     */
    @Schema(description = "服务类型：1-线上服务 2-线下服务 3-上门服务")
    private Integer serviceType;

    /**
     * 服务地区（线下服务时必填）
     */
    @Schema(description = "服务地区")
    private String serviceArea;

    /**
     * 服务地址（线下服务时必填）
     */
    @Schema(description = "服务地址")
    private String serviceAddress;

    /**
     * 经度
     */
    @Schema(description = "经度")
    private Double longitude;

    /**
     * 纬度
     */
    @Schema(description = "纬度")
    private Double latitude;

    /**
     * 服务时长（分钟）
     */
    @Schema(description = "服务时长（分钟）")
    private Integer duration;

    /**
     * 服务标签（多个标签逗号分隔）
     */
    @Schema(description = "服务标签")
    private String tags;

    /**
     * 服务详情（富文本）
     */
    @Schema(description = "服务详情")
    private String content;

    /**
     * 联系方式
     */
    @Schema(description = "联系方式")
    private String contact;

    /**
     * 服务状态：1-发布中 2-暂停接单 3-已下架 4-已删除
     */
    @Schema(description = "服务状态：1-发布中 2-暂停接单 3-已下架 4-已删除")
    private Integer status;

    /**
     * 审核状态：0-待审核 1-审核通过 2-审核拒绝
     */
    @Schema(description = "审核状态：0-待审核 1-审核通过 2-审核拒绝")
    private Integer auditStatus;

    /**
     * 审核意见
     */
    @Schema(description = "审核意见")
    private String auditRemark;

    /**
     * 是否置顶：0-否 1-是
     */
    @Schema(description = "是否置顶：0-否 1-是")
    private Integer isTop;

    /**
     * 置顶过期时间
     */
    @Schema(description = "置顶过期时间")
    private Long topExpireTime;

    /**
     * 浏览次数
     */
    @Schema(description = "浏览次数")
    private Integer viewCount;

    /**
     * 点赞次数
     */
    @Schema(description = "点赞次数")
    private Integer likeCount;

    /**
     * 收藏次数
     */
    @Schema(description = "收藏次数")
    private Integer favoriteCount;

    /**
     * 订单次数
     */
    @Schema(description = "订单次数")
    private Integer orderCount;

    /**
     * 评价次数
     */
    @Schema(description = "评价次数")
    private Integer reviewCount;

    /**
     * 平均评分（1-5分）
     */
    @Schema(description = "平均评分")
    private BigDecimal avgRating;

    /**
     * 服务提供者认证状态：0-未认证 1-个人认证 2-企业认证
     */
    @Schema(description = "服务提供者认证状态：0-未认证 1-个人认证 2-企业认证")
    private Integer providerAuth;

    /**
     * 是否支持议价：0-否 1-是
     */
    @Schema(description = "是否支持议价：0-否 1-是")
    private Integer allowBargain;

    /**
     * 是否支持预约：0-否 1-是
     */
    @Schema(description = "是否支持预约：0-否 1-是")
    private Integer allowReservation;

    /**
     * 服务权重（用于排序）
     */
    @Schema(description = "服务权重")
    private Integer weight;

    /**
     * 发布时间
     */
    @Schema(description = "发布时间")
    private Long publishTime;
} 